WIFI P2P使用指南
1. 概述¶
本文主要Linux 系统下SSTAR WIFI P2P的使用,P2P使用GC 和 GO 均使用 wpa_supplicant进行连接通信,以下wpa_supplicant使用的是Version2.6。
注意:
如果开发板和手机,window 10电脑通过wifi display 方式连接,没有传图很快就会掉线。根据测试,windows 10 电脑连接后在1分钟左右掉线,需重新执行P2P_LISTEN
。
2. 编译需要打开的宏¶
NL80211和WEXT 二选一即可,建议使用NL80211
需要打开WPS相关的宏,P2P最终连接还是通过WPS进行连接的。
需要打开80211N, GO模式支持11n。
3. 配置文件¶
必备文件:
ctrl_interface=/tmp/p2p_supplicant //创建和wpa_supplicant 交互的netlink 接口 update_config=1 //连接的设备信息会在此刷新配置文件 device_name=IPC_DEVICES2 //被广播的设备名称 device_type=10-0050F204-5 //有很多类型,目前测试直接配置此文件即可 config_methods=virtual_push_button physical_display keypad //按照此文件配置 p2p_ssid_postfix=-IPC_DEVICES2 persistent_reconnect=1 //重连
可选文件:
p2p_listen_reg_class=81 p2p_listen_channel=1 p2p_oper_reg_class=115 p2p_oper_channel=36 p2p_go_intent=15 //go和gc协商的等级,15最高,所以会成为go(配置后,模块会一直做go,也就是ap) country=CN
4. 设备执行步骤¶
4.1. 设备作为GO¶
-
运行wpa_supplicant
SSTAR WIFI 使用P2P功能只能用p2p0.
p2p_supplicant.conf 内容:
wpa_supplicant –ip2p0 –Dnl80211 –c p2p_supplicant.conf –B
因为要作为GO,所以需要配置dhcp服务器。
ifconfig p2p0 192.168.100.1 dnsmasq interface=wlan0 --no-daemon --no-resolv --leasefile-ro --no-poll --dhcp-range=192.168.100.2,192.168.100.254,12h &
-
进入与wpa_supplicant命令交互界面
wpa_cli –p /tmp/p2p_supplicant
-
设置P2P相关参数
SET wifi_display 1 WFD_SUBELEM_SET 0 000600111c440032 P2P_FLUSH P2P_SET listen_channel 6 P2P_LISTEN
执行完成后可在其他设备(手机或者windows 10)对应的界面搜索到IPC_DEVICES2 设备。
Windows 10 P2P界面:
手机P2P界面:
-
板子以GO模式主动去连接手机
-
P2p_find 10
搜索10秒,可通过 p2p_stop_find 停止搜索
-
p2p_peers
查看搜索到的P2P设备,只显示mac地址,有的才能够连接
-
p2p_connect 02:08:22:da:fc:fb pbc go_intent=15
作为GO去连接手机。 板子输入该命令以后,等待手机确认:
手机端显示:
手机点击接受以后:
注意: 手机端需尽快确认,否则会出现超时错误
-
-
手机主动连接板子,设备强制GO模式去连接
-
P2P_SET listen_channel 6
P2P_LISTEN,设置监听信道,以及进入监听模式,手机会显示该设备
-
手机发起连接
板子有如下打印:
-
板子强制作为GO,应答手机发起的连接
-
连接状态
-
-
设备处于GO模式,手机主动去连接板子
手机发起连接
板端确认连接
注意:
-
手机请求连接后需尽快回应,否则会出现超时错误
-
如果有手机主动发起连接,连接上以后手机如果发图失败会在1分钟左右掉线。
-
-
查看状态以及连接上的设备
-
手机点击断开连接,板子还是处于GO模式
-
板子断开连接,会退出GO模式
命令交互界面输入 disconnect 断开连接。
4.2. 设备作为GC¶
-
运行wpa_supplicant
SSTAR WIFI 使用P2P功能只能用p2p0.
p2p_supplicant.conf 内容:
wpa_supplicant –ip2p0 –Dnl80211 –c p2p_supplicant.conf –B
-
进入与wpa_supplicant命令交互界面
wpa_cli –p /tmp/p2p_supplicant
-
设置P2P相关参数
SET wifi_display 1 WFD_SUBELEM_SET 0 000600111c440032 P2P_FLUSH P2P_SET listen_channel 6 P2P_LISTEN
执行完成以后会在其他设备(手机或者windows 10)对应的界面搜索到IPC_DEVICES2 设备。
Windows 10 P2P界面:
手机P2P界面:
-
板子以GC模式,主动发起连接
-
P2p_find 10 , 搜索10秒
-
p2p_peers
查看搜索到的P2P设备,只显示mac地址,有的才能够连接
-
p2p_connect 02:08:22:da:fc:fb pbc go_intent=0, 作为GC去连接手机。
板子输入该命令以后,等待手机确认:
手机界面:
手机确认以后,板子端的打印:
-
连接上后退出获取IP地址
-
查看状态
-
-
手机主动发起连接,板子以GC模式应答连接
-
P2P_SET listen_channel
6 P2P_LISTEN
设置监听信道,以及进入监听模式,手机会显示该设备
-
手机发起连接 板子有如下打印
-
板子强制作为GC,应答手机发起的连接
-
连接成功获取IP地址
-
-
断开连接 在手机界面操作或者在板子端输入 disconnect
4.3. 设备作为GO(AP)¶
-
p2p_supplicant.conf 配置
ctrl_interface=/tmp/p2p_supplicant update_config=1 device_name=IPC_DEVICES2 device_type=10-0050F204-5 config_methods=virtual_push_button physical_display keypad p2p_listen_reg_class=81 p2p_listen_channel=1 p2p_oper_reg_class=115 p2p_oper_channel=36 p2p_go_intent=15 p2p_ssid_postfix=-IPC_DEVICES2 #新增加如下部分 p2p_passphrase_len=8 #密码限制了只有8位 p2p_no_group_iface=1 max_num_sta=8 #最大连接个数为8个 network={ ssid="DIRECT-IPC_DEVICES2"#需要注意ssid一定要以DIRECT-开头 psk="12345678" proto=RSN key_mgmt=WPA-PSK pairwise=CCMP auth_alg=OPEN mode=3 disabled=2 }
-
运行wpa_supplicant
先执行
rm -f /dev/random;ln -s /dev/urandom /dev/random;
再 执 行wpa_supplicant -Dnl80211 -ip2p0 -c p2p_supplicant.conf -B
-
进入与wpa_supplicant命令的交互界面
让P2P广播携带ssid,手机能够搜索到:
wpa_cli –p /tmp/p2p_supplicant SET wifi_display 1 wpa_cli –p /tmp/p2p_supplicant WFD_SUBELEM_SET 0 000600111c440032
-
制进入GO模式
wpa_cli –p /tmp/p2p_supplicant P2P_GROUP_ADD persistent=0
参数说明:
P2P_GROUP_ADD 强制进入GO模式。
persistent=0
persistent配置为1,就会在p2p_supplicant.conf文件里生成一个network配置项,ssid会在上图的ssid前面加上Direct-xx信息,pwd也会相应的变动,导致输入12345678密码无法正常连接。
persistent配置为0后就不会生成新的network配置项,beacon中的ssid就是p2p_supplicant.conf里面配置的network中的ssid。
-
手机p2p 搜索到的GO名字
-
手机发起连接
手机wifi界面搜到的ap
-
手机作为sta连接上ap
GO(AP)端的打印信息如下:
注意:不需要发送命令,sta和连接ap一样。